
        <html>
			<head>
			     <title>恶意传播之——社工+白+黑 - 卫士通攻防实验室</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/16279">http://drops.wooyun.org/tips/16279</a></h1>
				
      <p>
        <h1>0x00 背景</h1>

<hr />

<p>日前实验室捕获一个样本。远远望去，像是搜狗输入法，在测试机中点开一看，弹出一款游戏的物价表，再看PE文件属性，还带正常着数字签名，一副人畜无害的样子。经过一番认真分析后。发现远没有这么简单，这里就分析过程记录一下，希望其他安全工作者有些许帮助。</p>

<p>先介绍一下所谓白名单免杀。随着病毒与杀软之间的斗争，杀软的手段不断地增多、增强，由早期传统的特征码匹配算法发展到目前虚拟机技术、实时监控技术等流行的查杀算法。但始终存在一种最直接也最根本的免杀方式——白名单免杀。病毒就安安静静地躺在杀软的白名单中，谁闲的没事会去查水表呢？</p>

<!--more-->

<p>当了解了白名单免杀的基本含义之后，就可以针对样本进行深入的研究，本文以下内容就是笔者拿到样本之后，逐步分析样本主要功能的完整过程，其分析环境如下：</p>

<ul>
<li>分析环境：win 7 x86 VMware </li>
<li>分析工具：IDA、CFF、OD</li>
</ul>

<h1>0x01 样本概述</h1>

<hr />

<p>样本包含5个文件：</p>

<table>
<thead>
<tr>
  <th>File name</th>
  <th>size</th>
  <th>MD5</th>
  <th>attribute</th>
</tr>
</thead>
<tbody>
<tr>
  <td>nvvsvc1.exe.exe</td>
  <td>451.50 KB (462336 bytes)</td>
  <td>4D9B3A508BC2402A86E10F7907022263</td>
  <td>hidden</td>
</tr>
<tr>
  <td>HWSignature.dll</td>
  <td>48.50 KB (49664 bytes)</td>
  <td>85F50E1D2DE076079D98F09416E4C710</td>
  <td>hidden</td>
</tr>
<tr>
  <td>HanziSort.dat</td>
  <td>158.75 KB (162557 bytes)</td>
  <td>4FB42CBC7ADD3CF2AB3F0A99B9E7CE25</td>
  <td>hidden</td>
</tr>
<tr>
  <td>图1</td>
  <td>Shortcut linked to cmd</td>
  <td>cmd /c nvvsvc1.exe &amp; exit</td>
  <td>Shortcut</td>
</tr>
<tr>
  <td>01.jpg.jpg</td>
  <td>99.07 KB (101446 bytes)</td>
  <td>78501660AD39494A7248BA0C96989494</td>
  <td>hidden</td>
</tr>
</tbody>
</table>

<ul>
<li>nvvsvc1.exe：即为搜狗输入法的更新工具，用virusbook查看后可判定完全没有问题。此外，该文件有正常的数字签名，见下图。</li>
</ul>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430084180170.png" alt="p1" /></p>

<ul>
<li>HWSignature.dll：这个DLL原本是搜狗输入法的硬件签名DLL，该样本中被劫持为恶意劫持。</li>
<li>HanziSort.dat：原本为搜狗输入法与汉字相关的数据文件，该样本中被替换为其他数据文件。</li>
<li>01.jpg.jpg：一副jpg图片，内容为《怪物猎人官方最新价格表》，后文有展示。</li>
<li>图1：指向cmd的快捷方式，其参数为<code>cmd.exe /c nvvsvc1.exe &amp; exit</code></li>
</ul>

<p>其中，nvvsvc1.exe为主程序，其目的是加载HWSignature.dll，而HWSignature.dll会加载并解码HanziSort.dat， 进一步的，HanziSort.dat会再次解码自身并在内存中释放svchost2.dll，此后手动加载svchost2.dll，该DLL为包含恶意程序的主要功能。</p>

<p>传播方式：以《怪物猎人官方最新物价表》为鱼饵进行钓鱼，下载解压后，其他文件隐藏，只能看到名称为“图1”的文件，点开后确实会展示图片，但木马也会加载。<strong>笔者建议广大游戏玩家，下载的攻略要先看清是什么东西，再点开查看内容。</strong></p>

<h1>0x02 主程序分析</h1>

<hr />

<p>拿到样本之后，首先放到virusbook查了查，主程序想必没问题，而除此之外的一个DLL就被查出有问题了。很明显，这是一个通过DLL劫持加载自己的木马样本，这种通过DLL劫持的木马，可以算是白名单免杀吗？这个问题先放一放，后文（0x8 结语）会给出笔者的看法。</p>

<p>IDA分析主程序，绝大部分都是输入法相关的操作，中规中矩。值得注意的是，此处创建了8个线程。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430241275239.png" alt="p2" /></p>

<p>这其中第4个线程，即执行sub&#95;427C80的线程会进一步调用sub&#95;42F090函数，在该函数的子函数中，会加载HWSignature.dll，但此处被样本劫持，用来执行其恶意功能。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430466417320.png" alt="p3" /></p>

<h1>0x03 DLL分析</h1>

<hr />

<p>跟进这个DLL，进一步分析该DLL的行为。无关行为不说，该DLL会打开HanziSort.dat文件：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430568620419.png" alt="p4" /></p>

<p>读取其内容，并解码：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430762229517.png" alt="p5" /></p>

<p>其解码方式很简单，只是把读取到的文件内容逐字节的与0x56做异或运算。解码之后，成为包含可执行指令的程序段：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012430818799616.png" alt="p6" /></p>

<p>此后，程序会通过retn的方式跳到解码的代码段执行。</p>

<h1>0x04 DAT分析</h1>

<hr />

<p>在DAT解码的代码中，首先会寻找解码内容为0xDDCCBBAA的位置：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012431090192716.png" alt="p7" /></p>

<p>通过该地址，可以辅助完成一些列的定位操作，具体内容不做介绍。进而会调用VirtualAlloc函数分配内存空间，然后通过memcpy函数将指定数据拷贝到申请的内存中：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012431230812812.png" alt="p8" /></p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012431359842913.png" alt="p9" /></p>

<p>而拷贝过去的内存段，会再一次进行解码：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124315180191012.png" alt="p10" /></p>

<p>其解码方式同样比较简单，是逐字节与0xCC进行异或运算。当完整所有解码工作之后，可以发现解码之后的内存为一个完整的PE文件：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124316986031117.png" alt="p11" /></p>

<p>将该PE文件dump出来，用查看CFF看下，可以确认是个完整的DLL：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124318183691214.png" alt="p12" /> <em>(忽略一些细节吧。笔者懒得打码了。)</em></p>

<p>这个DLL叫做svchost2.dll，后面的代码可想而知，新申请一块内存</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124320575581313.png" alt="p13" /></p>

<p>然后手动完成PE的加载流程：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124321673551412.png" alt="p14" /></p>

<p>以及根据导入表和重定位表做一些修复工作，并加载所需的各种DLL，最后调用VirtualProtect更改页保护。</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124323557601511.png" alt="p15" /></p>

<p>完成以上操作之后，调用DLL main函数：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124324132311610.png" alt="p16" /></p>

<p>DLL的主函数并没有什么需要深入分析的地方，这里略过。DLL main返回后，会查找DLL导出的mystart函数：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124326287871711.png" alt="p17" /></p>

<p>最后调用mystart：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124327804201810.png" alt="p18" /></p>

<h1>0x05 mystart分析</h1>

<hr />

<p>在该函数中，首先会获得当前仅进程的名字，并判断名字中是否包含”1.exe”字符串。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012432811201199.png" alt="p19" /></p>

<p>获得的样本中，当然是包含该字符串的。接下来，会进行一些有意思的事。首先会调用WinExec执行”<code>taskkill /f /im cmd.exe</code>”命令，然后创建一个互斥体。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012433040294209.png" alt="p20" /></p>

<p>进一步的，该样本会在C:\Users\zzz\AppData\Roaming创建一个文件夹，其名字随机：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124331714492114.png" alt="p21" /></p>

<p>在本次分析中为：C:\Users\zzz\AppData\Roaming\dptpbzwoztxwrh，并将样本所在的文件夹中所有文件都复制到该目录下，包括ida生成的几个文件，但排除01.jpg.jpg。对于这幅图片，该样本会调用cmd执行rundll32.exe shimgvw.dll imageview_fullscreen 01.jpg.jpg，其作用就是把样本中的01.jpg.jpg展示出来：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124333862252212.png" alt="p22" /> <em>（01.jpg.jpg ：什么仇什么怨？）</em></p>

<p>如此一来，受害者看到了想了解的《价格表》，也不会怀疑该文件是木马了。此外，复制到Roaming的主程序会重命名为MSUpdateXXXXXXXX.exe，XXXXXXXX表示8位随机字母。注意，IDA生成的几个文件也会被复制过去并重命名。</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124335476172310.png" alt="p23" /></p>

<p>拷贝完成之后，释放互斥体，并Sleep(0x2EE0)的时间。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012433734565247.png" alt="p24" /></p>

<p>并注册表增加一些键值：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012433898016257.png" alt="p25" /></p>

<p>最后，通过shellexecute执行刚刚复制到Roaming的样本文件。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434031929267.png" alt="p26" /></p>

<h1>0x06 第二次执行分析</h1>

<hr />

<p>当第二次执行时，之前的行为都是类似的，只有在mystart函数中，出现了变化。由于当前进程是复制到Roaming下的镜像文件，重命名之后不包含”1.exe”字符串（参考上文）。所以会执行到另一个分支，调用Fi函数。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434198357275.png" alt="p27" /></p>

<p>该函数为svchost2.dll的另外一个导出函数。该函数会隐藏自己的进程名以及其他的信息：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434363519284.png" alt="p28" /></p>

<p>隐藏结果使自己的进程名变为csrss.exe的，如图：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434464541295.png" alt="p29" /></p>

<p>但这种隐藏手段并不高级，随便一个工具就能识别出来。</p>

<p>进而，会调用Fa函数，该DLL的另一个导出函数。在该函数中出现了一些网络行为。首先，会连接139.196.184.116:34176</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434513887304.png" alt="p30" /></p>

<p>并发送数据：</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124347379563111.png" alt="p31" /></p>

<p>该数据是怎么来的，暂时没有必要追究。有需要时，可以进一步分析，不过，可以肯定的是，对于同一台机器，每次发送的数据是一样的，应该是作为机器的ID标识。发送之后，会接收到如下内容：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012434820417325.png" alt="p32" /></p>

<p>针对返回的内容，会判断是否含有”Set-Cookie:”字符串，如果有，则取出：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435018231334.png" alt="p33" /></p>

<p>接下来，会用该Cookie作为机器的标识。</p>

<p>进而，会连接139.196.184.116:35131地址：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435190948344.png" alt="p34" /></p>

<p>但是该端口已经挂掉了，无法连接上。所以，笔者只好重新定向到自己的IP，并模拟其通信。 连接上IP之后，会发送一些随机生成的数据：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435229347354.png" alt="p35" /></p>

<p>本机的监听结果如下：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435418719364.png" alt="p36" /></p>

<p>发送3次随机生成的数据之后，会创建新线程用于接收返回数据：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435528768374.png" alt="p37" /></p>

<p>该线程会接收来自139.196.184.116:35131回复的数据，但是由于该端口已经挂掉了，笔者只能随意的回复点什么东西，<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="896f261d6c2f0b61263dc8cdc5e8ebc9feecfafde6e7eca7eae6e4a7eae7">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435651386384.png" alt="p38" /></p>

<p>接收到回复之后，会在sub_12A50F0中做解码工作。其解码工作首先会将受到的数据逐比特与0xE9异或。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435843221394.png" alt="p39" /></p>

<p>进而会对长度进行判断，然后对几个关键位置的内容进行判断，如果出现不符合的情况就会结束该线程；如果全部满足条件，则调用zlib 1.2.8版的库函数解压接收到的数据。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012435963493402.png" alt="p40" /></p>

<p>最后根据解压缩出来的内容选择初始化某个对象，并调用该对象的成员函数，实现恶意功能。</p>

<p><img src="http://static.wooyun.org//drops/20160530/20160530124401902894110.png" alt="p41" /></p>

<p>执行完毕后，该线程会进入循环接收新的数据，并执行相应功能。此外，主线程创建了上述之后，会统计当前系统的各种信息：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012440251329422.png" alt="p42" /></p>

<p>其中sub_100010F0实现捕获摄像头信息的相关操作。当获取了所有的信息之后，发送给目标地址，目标地址同样挂掉了。最后同样进入发送和接收的循环中。</p>

<h1>0x07 恶意功能分析</h1>

<hr />

<p>该样本的恶意功能比较多，现随机展示一个通过匿名双管道实现远程CMD的功能。该功能由编号0x31的分支实现。</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012440315773432.png" alt="p43" /></p>

<p>详情参考sub&#95;10007DC0函数，该函数首先会调用sub&#95;10004C00 初始化socket，进而调用sub_1000F060创建管道并启动CMD进程：</p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012440585880441.png" alt="p44" /></p>

<p><img src="http://static.wooyun.org//drops/20160530/2016053012440647781451.png" alt="p45" /></p>

<!--这里文档显示不正确,留空-->

<!--![p46][46]-->

<h1>0x08 结语</h1>

<hr />

<p>这个样本并不复杂，但是能够实现较为全面的木马功能，另外通过游戏攻略进行传播，利用白+黑的方式过杀软。哪怕现在HWSignature.dll会被查杀。但有白名单宿主进程的话，绕过杀软并不困难（基本瞬间就能想到好几种绕过检测的方式）。因此这种模式是值得我们警惕的。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          